"""
将函数作为返回值返回，这也是高阶函数.在python中这种高阶函数叫做闭包
    js里面常用 函数直接返回一个函数这样组件可以直接使用进行渲染
    python使用函数返回优势：内部定义函数，返回给外部，这样外部环境就能通过返回函数看到内部定义的数据
    可以将私有的数据藏到闭包种，防止别人使用->java里面的private关键字
"""


def fn():
    a = 10

    def inner():
        print("我是内部函数fn2", a)

    return inner


res = fn()
print(res)
res()

"""
需求 求多个数的平均值
不使用闭包解决:定义一个全局变量，定义一个函数求平均值->问题：全局变量你能用别人也能用，一旦修改数据不准
使用闭包就能解决 b包定义一个集合。然后返回计算平均数的函数，这样别人既能调用，也不能修改里面的集合的值
闭包必须有函数嵌套，内部函数必须使用外部函数的一个变量，内部函数必须作为函数返回
使用时，首先调用外层的函数得到返回值的函数 ，然后返回值调用内部的函数
"""
def cal_avg():
    arr_list=[]
    def avg(num):
        arr_list.append(num)
        return sum(arr_list)/len(arr_list)
    return avg

avg=cal_avg()
print(avg(10))
print(avg(100))